package main

import "fmt"

/*
student admin
使用“面向对象”的思维方式编写一个学生信息管理系统。
	1. 学生有id、姓名、年龄、分数等信息
	2. 程序提供展示学生列表、添加学生、编辑学生信息、删除学生等功能
*/

type student struct {
	id    int64
	name  string
	score float32
}

type studentMgr struct {
	allStudent map[int64]student
}

// 查看
func (s studentMgr) show() {
	for _, stu := range s.allStudent {
		fmt.Printf("学号：%d   姓名：%s   分数：%f \n", stu.id, stu.name, stu.score)
	}
}

// 增加
func (s studentMgr) add() {
	// 定义接收学生信息变量
	var (
		stuId    int64
		stuName  string
		stuScore float32
	)

	// 获取用户输入的信息
	fmt.Print("输入添加的学生学号：")
	fmt.Scanln(&stuId)
	fmt.Print("输入添加的学生姓名：")
	fmt.Scanln(&stuName)
	fmt.Print("输入添加的学生学分：")
	fmt.Scanln(&stuScore)

	// 存入学生信息变量
	newStu := student{
		id:    stuId,
		name:  stuName,
		score: stuScore,
	}

	// 存入学生管理库
	s.allStudent[newStu.id] = newStu

}

// 修改
func (s studentMgr) edit() {
	// 接受用户要修改的学生学号
	var stuId int64
	fmt.Print("请输入要修改的学生学号：")
	fmt.Scanln(&stuId)

	// 根据学号查学生信息并展示
	oldStu, ok := s.allStudent[stuId]
	if !ok {
		fmt.Println("无该学号学生！")
		return
	}
	fmt.Printf("待修改的学生 姓名：%s   分数：%f \n", oldStu.name, oldStu.score)

	// 接受用户要修改的内容
	var (
		stuName  string
		stuScore float32
	)
	fmt.Print("输入修改学生的姓名：")
	fmt.Scanln(&stuName)
	fmt.Print("输入修改学生的学分：")
	fmt.Scanln(&stuScore)

	// 更新学生信息
	oldStu.name = stuName
	oldStu.score = stuScore
	s.allStudent[oldStu.id] = oldStu
	fmt.Printf("已修改为学生 姓名：%s   分数：%f \n", oldStu.name, oldStu.score)
}

// 删除
func (s studentMgr) del() {
	// 接受用户要删除的学生学号
	var stuId int64
	fmt.Print("请输入要删除的学生学号：")
	fmt.Scanln(&stuId)

	// 根据学号查学生信息并展示
	oldStu, ok := s.allStudent[stuId]
	if !ok {
		fmt.Println("无该学号学生！")
		return
	}
	fmt.Printf("待删除的学生 姓名：%s   分数：%f \n", oldStu.name, oldStu.score)

	// 删除学生
	delete(s.allStudent, stuId)

}
